package com.task.core.service;

import java.util.List;

import com.task.core.domain.DataSendHistoryInfo;
import com.task.core.domain.MissionSendHistoryInfo;
import com.task.core.dto.request.DataSendDetailRequestDTO;
import com.task.core.dto.request.MissionDataDetailRequestDTO;
import com.task.core.dto.request.MissionSendDetailRequestDTO;
import com.task.core.dto.request.info.HistoryDataSearchInfo;
import com.task.core.dto.response.MissionHistoryDetailResposeDTO;
import com.task.core.vo.resp.DataContentDetailRespVo;
import io.lettuce.core.dynamic.annotation.Param;

/**
 * @author 迪迦.
 * @date 2024/12/27 10:34
 */
public interface SendHistoryService {

  /**
   * 按分表前缀获取有哪些分表表名
   * @param historyDataGetIndex 前缀
   * @return  表名集合
   */
  List<String> getIndexTableNameByPrefix(String historyDataGetIndex);

  /**
   * 获取数据获取历史详情分页查询
   * @param request 请求参数
   * @return  数据发送详情
   */
  List<DataSendHistoryInfo> getDataSendDetailHistory(DataSendDetailRequestDTO request);

  /**
   * 按时间和表前缀获取应该查询的所有表名集合
   * @param tablePre  表名前缀
   * @param startTime 开始时间
   * @param endTime 结束时间
   * @return  查询条件和表名集合
   */
  List<HistoryDataSearchInfo> getSearchTableList(String tablePre, String startTime, String endTime);

  /**
   * 分页获取任务发送记录历史
   * @param request 请求参数
   * @return  任务发送历史集合
   */
  List<MissionSendHistoryInfo> getMissionSendDetailHistory(MissionSendDetailRequestDTO request);

  /**
   * 获取任务发送后处理结果集合,只返回boolean集合,因为只需要数量
   * @param searchInfo  查询条件和表名集合
   * @param missionCode 任务code
   * @return  处理结果集合
   */
  List<MissionHistoryDetailResposeDTO> getMissionSendHistoryByTimeType(List<HistoryDataSearchInfo> searchInfo, String missionCode);

  /**
   * 获取分表的唯一增长id
   * @param dateFormat  格式化后的时间
   * @param dateFormatYmdHms  具体时间
   * @param tablePre  表名前缀
   * @return  id
   */
  String getHistoryIdByNameAndTime(String dateFormat, String dateFormatYmdHms, String tablePre);

  /**
   * 根据id获取数据发送详情
   * @param request 请求参数
   * @return  详情
   */
  DataSendHistoryInfo getDataSendDetailById(DataSendDetailRequestDTO request);

  /**
   * 更新任务历史详情
   * @param searchTableList
   */
  void updateMissionHistoryaDetailIsDisplay( List<HistoryDataSearchInfo> searchTableList);

  List<DataContentDetailRespVo> getMissionDataDetail(MissionDataDetailRequestDTO request);
}
